package MediciADistanza.Control.User.Module;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Timer;

import Enum.XML_ELEMENT;
import MediciADistanza.Boundary.user.Module.FormDiRegistrazione;
import MediciADistanza.Control.User.UtenteControl;
import MediciADistanza.Entity.Conferma;
import MediciADistanza.Entity.User.ModelData.DatiRegistrazione;


/**
 * Gestisce la registrazione di un utente
 * 
 * @author Andrea Iann&igrave;
 */
public class RegistraUtenteControl extends ModuleControl {
	/**
	 * Timer di timeout operazione
	 */
	private Timer t;
	/**
	 * Viene creata una nuova instanza del modulo per la registrazione degli utenti
	 * @param controlPrincipale		Control utente principale
	 */
	public RegistraUtenteControl(UtenteControl controlPrincipale) {
		super(controlPrincipale);
		// TODO Auto-generated constructor stub
		
		int delay = 60000; //milliseconds
		ActionListener taskPerformer = new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
		    	  t.stop();
		    	  imWaiting = false;
		    	  utenteControl.timeoutRegistrazione();
		    }
		};
		t = new Timer(delay, taskPerformer);

		datiModulo = new DatiRegistrazione();
		frameModulo = new FormDiRegistrazione(this);
	}
	/**
	 * Raccoglie tutti i dati dal modulo e gli invia al server
	 */
	@Override
	public void sendModule() {
		// TODO Auto-generated method stub
		((FormDiRegistrazione)frameModulo).lockAll();
		
		((DatiRegistrazione)datiModulo).setCodiceFiscale(((FormDiRegistrazione)frameModulo).getCF());
		((DatiRegistrazione)datiModulo).setNome(((FormDiRegistrazione)frameModulo).getNome());
		((DatiRegistrazione)datiModulo).setCognome(((FormDiRegistrazione)frameModulo).getCognome());
		((DatiRegistrazione)datiModulo).setEmailRiserva(((FormDiRegistrazione)frameModulo).getER());
		((DatiRegistrazione)datiModulo).setUserType(utenteControl.getMyType());
		
		super.sendModule();
		
		imWaiting = true;
		t.start();
	}
	/**
	 * Chiude il modulo
	 */
	@Override
	public void exit() {
		utenteControl.avvia(UtenteControl.RETURN_HOME);
	}
	
	@Override
	public void setConferma(Conferma conferma) {
		if(imWaiting && requestID.equals(conferma.getElement(XML_ELEMENT.REQUEST_ID))) {
			t.stop();
			imWaiting = false;
			
			super.setConferma(conferma);
			
			boolean result = this.conferma.isPositive();
			
			if(result) {
				((FormDiRegistrazione)frameModulo).mostraDatiAccesso(this.conferma.getElement(XML_ELEMENT.USERID), this.conferma.getElement(XML_ELEMENT.PASSWORD));
				
				((FormDiRegistrazione)frameModulo).enableExit();
			} else
				this.utenteControl.avvia(UtenteControl.REGISTER_ERROR);
		} 
	}
}
 
